"""
在函数上添加包装器

问题：
    你想在函数上添加一个包装器，增加额外的操作处理（如日志、计时等）。
解决方案：
    如果你想使用额外的代码包装一个函数，可以定义一个装饰器函数。
"""

import time
from functools import wraps


def compute_time(func):
    """
    计时装饰器函数
    :param func:
    :return:
    """

    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(func.__name__, end_time - start_time, "秒")
        return result

    return wrapper


@compute_time
def countdown(n):
    """
    倒数计秒
    :param n:
    :return:
    """
    while n > 0:
        n -= 1


def use_wrapper():
    countdown(10000000)
    # 输出结果：
    """
    countdown 1.5836248397827148 秒
    """


if __name__ == "__main__":
    use_wrapper()
